<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // 这是因为计算机在存储数字是是通过二进制来存储的，呈现的时候是通过十进制来存储的，
    // 所以有误差。但是再继续深问你为啥计算机的二进制存储会造成误差呢，可能你就支支吾吾了

    // 十进制转二进制
    // 情况有三种：

    //     1、整数
    //     2、负整数
    //     3、小数

    // 整数
        // 整数的十进制转二进制，是怎么转的呢？记住一条公式：除二取余，然后倒序排列，
        // 高位补零。啥意思呢？别急，我给你讲讲哈，我就拿81这个数字来举例子吧，
        // 毕竟曾经有一个男人，单场砍下81分：
        
        // 看整数.webp

        // 可以得出1010001，可以看出有7位，但是呢，计算机内部表示数是定长的，
        // 例如8位、16位、32位，所以7位是不够的，需要高位补0，也就是01010001，
        // 规范写法为(81)10 = (01010001)



    // 负整数
        // 负整数的话，是这样的规则：

        // 第一步：把正整数转成二进制
        // 第二步：对二进制取反
        // 第三步：对取反后的二进制进行加1


    // 小数
    //     小数转二进制的话是这样的：对小数点以后的数乘以2，得出结果，
    //     取结果的整数部分(不是 0 就是 1)，然后再对结果的小数点以后的数乘以2，
    //     得出结果，再取结果整数部分，再然后然后再对结果的小数点以后的数乘以2。。。。以此类推。。
    //     知道小数部分为0或者位数已经到达位数。再把这个过程中取的整数按先后顺序排好就行了。
    //     我举个例子吧，比如0.125：


    // 可以看到，0.1和0.2转成二进制都是无限循环的，超过了最大位数，所以存储时只能通过近似值去存储他们两，
    // 那自然的，当0.1 + 0.2时，近似值转十进制肯定也是近似值，所以造成误差，
    // 最大位数是根据硬盘内存大小决定的，所以一般硬盘内存越大，精确度越高。

</script>
</html>